Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


Displaying Raw • Download


meshchatx/src/frontend/js/plugins/pluginManifest.js 9f71f3420c18d5800afb493b723c328d23c7ea12 (9f71f342) Text, 3.06 KB

T8b949e// SPDX-License-Identifier: 0BSD

Tff7b72import Tb4b4b4{ Te6edf3declaredPermissionIdsTb4b4b4, Te6edf3manifestPermissionSummary Tff7b72as Te6edf3summarizePermissions Tb4b4b4} Tff7b72from Ta5d6ff"./pluginPermissions.js"Tb4b4b4;

Tff7b72const Te6edf3SUPPORTED_API_VERSION Tff7b72= T79c0ff1Tb4b4b4;

T8b949e/**
* @typedef {Object} PluginManifest
* @property {string} id
* @property {string} version
* @property {string | number} apiVersion
* @property {string} [name]
* @property {string} [description]
* @property {{ entry: string, type: 'js' | 'wasm' }} [frontend]
* @property {{ entry: string, type: 'wasm' | 'python' }} [backend]
* @property {Object} [contributes]
* @property {Object} [permissions]
* @property {{ endpoints?: string[] }} [network]
*/

T8b949e/**
* @param {unknown} manifest
* @returns {PluginManifest}
*/
Tff7b72export Tff7b72function Te6edf3validatePluginManifestTb4b4b4(Te6edf3manifestTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3manifest Tff7b72|| Tff7b72typeof Te6edf3manifest Tff7b72!== Ta5d6ff"object"Tb4b4b4) Tb4b4b4{
Tff7b72throw Tff7b72new Tf85149ErrorTb4b4b4(Ta5d6ff"Plugin manifest must be an object"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3record Tff7b72= T8b949e/** @type {Record<string, unknown>} */ Tb4b4b4(Te6edf3manifestTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72typeof Te6edf3recordTb4b4b4.Te6edf3id Tff7b72!== Ta5d6ff"string" Tff7b72|| Tff7b72!Te6edf3recordTb4b4b4.Te6edf3idTb4b4b4.Te6edf3trimTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72throw Tff7b72new Tf85149ErrorTb4b4b4(Ta5d6ff"Plugin manifest requires a non-empty id"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Tff7b72typeof Te6edf3recordTb4b4b4.Te6edf3version Tff7b72!== Ta5d6ff"string" Tff7b72|| Tff7b72!Te6edf3recordTb4b4b4.Te6edf3versionTb4b4b4.Te6edf3trimTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72throw Tff7b72new Tf85149ErrorTb4b4b4(Ta5d6ff"Plugin manifest requires a version"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3apiVersion Tff7b72= Tffa657NumberTb4b4b4(Te6edf3recordTb4b4b4.Te6edf3apiVersionTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Tffa657NumberTb4b4b4.Tffa657isFiniteTb4b4b4(Te6edf3apiVersionTb4b4b4) Tff7b72|| Te6edf3apiVersion Tff7b72!== Te6edf3SUPPORTED_API_VERSIONTb4b4b4) Tb4b4b4{
Tff7b72throw Tff7b72new Tf85149ErrorTb4b4b4(Ta5d6ff`Ta5d6ffPlugin apiVersion must be Tffd700${Te6edf3SUPPORTED_API_VERSIONTffd700}Ta5d6ff`Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3recordTb4b4b4.Te6edf3frontend Tff7b72!= Tff7b72nullTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3frontend Tff7b72= T8b949e/** @type {Record<string, unknown>} */ Tb4b4b4(Te6edf3recordTb4b4b4.Te6edf3frontendTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72typeof Te6edf3frontendTb4b4b4.Te6edf3entry Tff7b72!== Ta5d6ff"string" Tff7b72|| Tff7b72!Te6edf3frontendTb4b4b4.Te6edf3entryTb4b4b4.Te6edf3trimTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72throw Tff7b72new Tf85149ErrorTb4b4b4(Ta5d6ff"Plugin frontend.entry is required when frontend is set"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3frontendTb4b4b4.Te6edf3type Tff7b72!== Ta5d6ff"js" Tff7b72&& Te6edf3frontendTb4b4b4.Te6edf3type Tff7b72!== Ta5d6ff"wasm"Tb4b4b4) Tb4b4b4{
Tff7b72throw Tff7b72new Tf85149ErrorTb4b4b4(Ta5d6ff"Plugin frontend.type must be js or wasm"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3recordTb4b4b4.Te6edf3backend Tff7b72!= Tff7b72nullTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3backend Tff7b72= T8b949e/** @type {Record<string, unknown>} */ Tb4b4b4(Te6edf3recordTb4b4b4.Te6edf3backendTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72typeof Te6edf3backendTb4b4b4.Te6edf3entry Tff7b72!== Ta5d6ff"string" Tff7b72|| Tff7b72!Te6edf3backendTb4b4b4.Te6edf3entryTb4b4b4.Te6edf3trimTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72throw Tff7b72new Tf85149ErrorTb4b4b4(Ta5d6ff"Plugin backend.entry is required when backend is set"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3backendTb4b4b4.Te6edf3type Tff7b72!== Ta5d6ff"wasm" Tff7b72&& Te6edf3backendTb4b4b4.Te6edf3type Tff7b72!== Ta5d6ff"python"Tb4b4b4) Tb4b4b4{
Tff7b72throw Tff7b72new Tf85149ErrorTb4b4b4(Ta5d6ff"Plugin backend.type must be wasm or python"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72const Te6edf3permissions Tff7b72= Te6edf3recordTb4b4b4.Te6edf3permissions Tff7b72?? Tb4b4b4{Tb4b4b4}Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3permissions Tff7b72&& Tff7b72typeof Te6edf3permissions Tff7b72!== Ta5d6ff"object"Tb4b4b4) Tb4b4b4{
Tff7b72throw Tff7b72new Tf85149ErrorTb4b4b4(Ta5d6ff"Plugin permissions must be an object"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3recordTb4b4b4.Te6edf3network Tff7b72!= Tff7b72null Tff7b72&& Tff7b72typeof Te6edf3recordTb4b4b4.Te6edf3network Tff7b72!== Ta5d6ff"object"Tb4b4b4) Tb4b4b4{
Tff7b72throw Tff7b72new Tf85149ErrorTb4b4b4(Ta5d6ff"Plugin network must be an object"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72return T8b949e/** @type {PluginManifest} */ Tb4b4b4(Te6edf3manifestTb4b4b4)Tb4b4b4;
Tb4b4b4}

T8b949e/**
* @param {PluginManifest} manifest
* @param {(key: string, values?: Record<string, unknown>) => string} [t]
* @returns {string[]}
*/
Tff7b72export Tff7b72function Te6edf3manifestPermissionSummaryTb4b4b4(Te6edf3manifestTb4b4b4, Te6edf3tTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3translate Tff7b72= Te6edf3t Tff7b72|| Tb4b4b4(Tb4b4b4(Te6edf3keyTb4b4b4) Tb4b4b4=> Te6edf3keyTb4b4b4)Tb4b4b4;
Tff7b72return Te6edf3summarizePermissionsTb4b4b4(Te6edf3manifestTb4b4b4, Te6edf3translateTb4b4b4)Tb4b4b4;
Tb4b4b4}

Tff7b72export Tb4b4b4{ Te6edf3SUPPORTED_API_VERSIONTb4b4b4, Te6edf3declaredPermissionIds Tb4b4b4}Tb4b4b4;


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────